package com.satan.juc.demo23;

import java.util.concurrent.*;

public class FutureTaskWithThreadPoolExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 创建Callable任务
        Callable<String> callableTask = () -> {
            // 模拟耗时操作
            TimeUnit.SECONDS.sleep(2);
            return "任务完成";
        };

        // 使用FutureTask包装Callable任务
        FutureTask<String> futureTask = new FutureTask<>(callableTask);

        // 创建线程池
        ExecutorService executorService = Executors.newCachedThreadPool();

        // 提交FutureTask到线程池执行
        executorService.submit(futureTask);

        // 在需要的时候，可以通过futureTask.get()获取任务执行结果
        // 如果任务还没有完成，这个调用会阻塞直到任务完成
        String result = futureTask.get();

        System.out.println("任务的执行结果: " + result);

        // 关闭线程池
        executorService.shutdown();
    }
}
